package logika;

/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */
/*******************************************************************************
 * Příkaz Odemkni. Slouží pro odemykání prostorů nebo věcí.
 *
 * @author    Tomáš Koválik
 * @version   1.0
 */
public class PrikazOdemkni implements IPrikaz
{
    //== Datové atributy (statické i instancí)======================================
    private static final String NAZEV = "odemkni";
    private HerniPlan plan;

    //== Konstruktory a tovární metody =============================================

    /***************************************************************************
     *  Konstruktor třídy.
     *  
     *  @parametr     plan, odkaz na třídu HerniPlan.
     */
    public PrikazOdemkni(HerniPlan plan)
    {
        this.plan = plan;
    }

    //== Nesoukromé metody (instancí i třídy) ======================================
    /**
     * Metoda provádí příkaz. Metoda zjistáí zda je daná věc či prostor již odemčený a poté o tom vypíše infromaci. 
     * Pokud má hráč v batoh klíč tak se daná věci či prostr odemkne.
     */
    public String proved(String... parametry){
        if (parametry.length == 0) {
            return "Co mám odemknout?";
        }

        String jmeno = parametry[0];

        Prostor sousedniProstor = plan.getAktualniProstor().vratSousedniProstor(jmeno);
        Batoh batoh = plan.getBatoh();
        if (sousedniProstor == null){
            Prostor aktProstor = plan.getAktualniProstor();
            if (aktProstor.obsahujeVec(jmeno)){
                Vec vec = aktProstor.najdiVecVMistnosti(jmeno);
                if (vec.jeZamcena()){
                    if (plan.getBatoh().obsahujeVec(vec.getKlic().getNazev())){
                        vec.zamknout(false);
                        batoh.odeberVec(vec.getKlic().getNazev());
                        return "Yes...tak dekodér fungoval";
                    }
                    else {
                        return "Nemám dekodér...";     
                    }
                }
                else {
                    return "Tohle není zakodované...";
                }
            }
            else if(aktProstor.obsahujeVec(jmeno)==false) {
                return "Tak " + aktProstor.getNazev() + " neni to spravny misto, kde tohle hledat!";
            }
            return "Ty jo tak dveře do "+jmeno+" tu nejsou...";
        }
        else {
            if(sousedniProstor.jeZamceno()){
                if(plan.getBatoh().obsahujeVec(sousedniProstor.getKlic().getNazev())){
                    sousedniProstor.zamknout(false);
                    batoh.odeberVec(sousedniProstor.getKlic().getNazev());
                    return "Paráda. Dveře jsou odemceny. Muzu pokracovat.";
                }
                else{
                    return "Abych se sem dostal musim u sebe mít "+sousedniProstor.getKlic().getNazev();
                }
            }

            else {
                return "Tak tady už je odemčeno";
            }
        }
    }

    /**
     *  Metoda vrací název příkazu (slovo které používá hráč pro jeho vyvolání)
     *  
     *  @ return nazev prikazu
     */
    @Override
    public String getNazev() {
        return NAZEV;
    }

}
